import request from "../utils/request";

/**
 * 封装考试计划管理相关的API请求
 */
class ExamScheduleRequest {

    /**
     * 新增考试计划
     * @param {number} sessionId - 考次ID
     * @param {number} courseId - 课程ID
     * @param {string} examDate - 考试日期 (格式: "YYYY-MM-DD")
     * @param {string} startTime - 开始时间 (格式: "HH:mm:ss")
     * @param {string} endTime - 结束时间 (格式: "HH:mm:ss")
     * @returns {Promise<object>} - 创建成功的考试计划对象
     */
    async add(sessionId, courseId, examDate, startTime, endTime) {
        const newSchedule = await request({
            url: '/exam-schedules',
            method: 'post',
            data: {
                sessionId,
                courseId,
                examDate,
                startTime,
                endTime
            },
        });
        return newSchedule;
    }

    /**
     * 查询考试计划列表
     * @param {number} sessionId - 考次ID (必填)
     * @param {object} [options={}] - 包含分页和筛选参数的对象
     * @param {number} [options.page=1] - 页码
     * @param {number} [options.size=10] - 每页数量
     * @param {string} [options.courseName] - 按课程名称模糊查询
     * @returns {Promise<object>} - 标准分页列表数据
     */
    async getList(sessionId, { page, size, courseName } = {}) {
        if (!sessionId) {
            // 在前端进行一次校验，防止发送无效请求
            return Promise.reject(new Error("查询考试计划列表时，考次ID (sessionId) 是必填项。"));
        }
        const listData = await request({
            url: '/exam-schedules',
            method: 'get',
            params: {
                sessionId,
                page,
                size,
                courseName
            },
        });
        return listData;
    }

    /**
     * 更新考试计划
     * @param {number|string} id - 要更新的考试计划ID
     * @param {object} scheduleData - 包含待更新字段的对象 (sessionId, courseId, examDate, etc.)
     * @returns {Promise<object>} - 更新后的考试计划对象
     */
    async update(id, scheduleData) {
        const updatedSchedule = await request({
            url: `/exam-schedules/${id}`,
            method: 'put',
            data: scheduleData,
        });
        return updatedSchedule;
    }

    /**
     * 删除考试计划
     * @param {number|string} id - 要删除的考试计划ID
     * @returns {Promise<null>}
     */
    async delete(id) {
        const result = await request({
            url: `/exam-schedules/${id}`,
            method: 'delete',
        });
        return result;
    }
}

// 导出类的实例，方便在其他地方直接调用方法
export default new ExamScheduleRequest();